android 您所在的位置:网站首页 android rssi android

android

2024-05-23 04:28| 来源: 网络整理| 查看: 265

我是 Android 编程的新手,正在尝试了解 BroadcastReceivers 的概念。为了帮助自己,我正在尝试编写一个监视 Wifi 信号强度的小应用程序。

现在,根据我的理解,我可以简单地等待接收系统广播的 RSSI_CHANGED_ACTION。 RSSI 应该经常更改,这意味着我应该经常收到此通知......但是,我从来没有收到过一次。我已将我的代码稀释到最低限度,因此它只会在收到通知时记录一条消息。

public class RssiActivity extends Activity { public BroadcastReceiver rssiReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Log.d("Rssi", "RSSI changed"); } }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public void onResume() { super.onResume(); registerReceiver(rssiReceiver, new IntentFilter(WifiManager.RSSI_CHANGED_ACTION)); Log.d("Rssi", "Registered"); } @Override public void onPause() { super.onPause(); unregisterReceiver(rssiReceiver); Log.d("Rssi", "Unregistered"); } }

我已经看过这篇文章Android: How to monitor WiFi signal strength这似乎对我没有帮助。我也在这里尝试了代码示例 http://android-er.blogspot.com/2011/01/check-rssi-by-monitoring-of.html而且它也从不更新 RSSI 值。我很困惑为什么会这样。您能给我的任何帮助将不胜感激。谢谢!

最佳答案

所以,我遇到了和你一样的问题,想要在用户四处走动时更新 RSSI 值等,但我无法使用 RSSI_CHANGED_ACTION 解决它。

就像您遇到的问题一样,我的回调不会被正确调用。奇怪的是,它只在创建 Activity 时被调用一次,然后就再也没有调用过。

我的解决方法

在您的 onCreate() 中,为 SCAN_RESULTS_AVAILABLE_ACTION 注册一个回调。然后调用 WifiManager.startScan()。

现在,在你的回调中,做:

WifiManager wifiMan=(WifiManager)getActivity().getSystemService(Context.WIFI_SERVICE); int newRssi = wifiMan.getConnectionInfo().getRssi(); wifiMan.startScan();

现在您有一个循环,其中回调启动扫描、接收结果并启动另一次扫描。

它很粗糙并且会消耗大量能量,但是,您可以在四处走动时观察 RSSI 值的变化。

完整代码

(请注意,我使用 onResume 和 onPause 来注册和注销,所以它只会重复扫描,例如,当 Activity 在屏幕上时,会浪费电池)

@Override public void onResume() { super.onResume(); //Note: Not using RSSI_CHANGED_ACTION because it never calls me back. IntentFilter rssiFilter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); this.registerReceiver(myRssiChangeReceiver, rssiFilter); WifiManager wifiMan=(WifiManager)getActivity().getSystemService(Context.WIFI_SERVICE); wifiMan.startScan(); } @Override public void onPause() { super.onPause(); this.unregisterReceiver(myRssiChangeReceiver); } /** * Broadcast receiver to update */ private BroadcastReceiver myRssiChangeReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context arg0, Intent arg1) { WifiManager wifiMan=(WifiManager)getActivity().getSystemService(Context.WIFI_SERVICE); wifiMan.startScan(); int newRssi = wifiMan.getConnectionInfo().getRssi(); Toast.makeText(getActivity(), ""+newRssi, Toast.LENGTH_SHORT).show(); }};

抱歉我来晚了,我只是想知道我必须解决你的问题:P

关于android - 应用程序永远不会收到 RSSI_CHANGED_ACTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8717741/



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有